#ifndef CHASSIS_H
#define CHASSIS_H

/**
 * @brief 底盘模式枚举
 */
typedef enum
{
    YAW_MODE = 0, // 锁头模式
    JOY_MODE,     // 摇杆模式
    POINT_MODE,   // 走点模式
    CHASSIS_Front_MODE,
    CHASSIS_Back_MODE,
    CHASSIS_Left_MODE,
    CHASSIS_Right_MODE,
    CHASSIS_Right_Front_MODE,
    CHASSIS_Right_Back_MODE,
} ChassisMode_t;

/**
 * @brief 底盘命令的消息枚举体
 */
typedef enum
{
    CHASSIS_FREE = 0,   // 底盘解锁
    CHASSIS_LOCK,       // 底盘死锁
    CHASSIS_CONF_YAW,   // 设置为锁头模式
    CHASSIS_CONF_JOY,   // 设置为摇杆模式
    CHASSIS_CONF_POINT, // 设置为走点模式
    CHASSIS_Front,
    CHASSIS_Back,
    CHASSIS_Left,
    CHASSIS_Right,
    CHASSIS_Right_Front,
    CHASSIS_Right_Back,
} ChassisCmdMsg_t;

/**
 * @brief 底盘命令的消息枚举体
 */
typedef enum
{
    KEY_1 = 1,
    KEY_2,
    KEY_3,
    KEY_4,
    KEY_5,
    KEY_6,
    KEY_7,
    KEY_8,
    KEY_9,
    KEY_10,
} KeyCmdMsg_t;

/**
 * @brief 定位仪实例
 */
typedef struct
{
    float posX;
    float posY;
    float rawYaw;
    float velX;
    float velY;
    int16_t ovCnt;
} Locater_t;

/**
 * @brief 定位仪消息结构体
 */
typedef struct
{
    float posX;
    float posY;
    float posYaw;
    float velX;
    float velY;
    float velYaw;
} LocaterMsg_t;

/**
 * @brief 摇杆消息结构体
 */
typedef struct
{
    int16_t leftX;
    int16_t leftY;
    int16_t rightX;
    int16_t rightY;
} JoyStickMsg_t;

/**
 * @brief 底盘速度指令的消息结构体
 */
typedef struct
{
    float velX;
    float velY;
    float omega;
    float vel;
} VelMsg_t;

/**
 * @brief 底盘点位指令的消息结构体
 */
typedef struct
{
    float posX;
    float posY;
    float yaw;
    int32_t sum;
} PoseMsg_t;

#endif //CHASSIS_H
